package cn.lzy.study.datasource.datasource;

import cn.lzy.study.datasource.config.DruidProperties;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.stereotype.Component;

import javax.sql.DataSource;
import java.util.HashMap;
import java.util.Map;

/**
 * 加载数据源
 * @author LZY
 * @since 2022-08-11
 */
@Component
@EnableConfigurationProperties(DruidProperties.class)   // 引入该配置属性
public class LoadDataSource {

    @Autowired
    private DruidProperties druidProperties;

    /**
     * 加载所有数据源
     * @return  返回一个map（key-数据源的名称，value-数据源）
     */
    public Map<String, DataSource> loadAllDataSource() {
        // 所有的数据源缓存
        Map<String, DataSource> map = new HashMap<>();

        // 从配置属性中获取数据源信息
        Map<String, Map<String, String>> ds = druidProperties.getDs();
        try {
            for(String dataSourceName : ds.keySet()) {
                // 根据配置属性信息创建数据源（得到的数据源仅有三个核心属性：url、username、password）
                DataSource baseDataSource = DruidDataSourceFactory.createDataSource(ds.get(dataSourceName));
                // 对获取到的数据源，进行公共属性赋值
                DataSource dataSource = druidProperties.initDataSource((DruidDataSource) baseDataSource);
                // 将数据源存入到缓存中
                map.put(dataSourceName, dataSource);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        return map;
    }
}
